/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package animacion;

import java.util.LinkedList;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;

/**
 *
 * @author David
 */
public class cola {

    private boolean truncado;
    private int maximo;
    private int objetostotales;
    public salida S;
    public LinkedList<objeto> C;
    AnimarCosas ACSalida, ACCola;
    LinkedList<Integer> estadistica = new LinkedList<Integer>();
    LinkedList<Integer> tiempoencola = new LinkedList<Integer>();
    public int agregados=0;

    public cola(boolean truncado, int maximo) {

        this.truncado = truncado;
        this.maximo = maximo+1;
        C = new LinkedList();
        S = new salida();
    }
    public void agregarAnimacion(JLabel entrada, JLabel salida, JLabel cola, JPanel panel, JSeparator separador){
        ACSalida = new AnimarCosas(entrada, salida, cola, panel, separador);
        ACSalida.deEntradaaSalida();
        ACCola = new AnimarCosas(entrada, salida, cola, panel, separador);
        ACCola.deEntradaaCola();
    }

    public void agregar(objeto item) {
        if (truncado) {
            if (C.size() < maximo) {
                C.add(item);
                estadistica.add(C.size());
                agregados++;
                objetoanimado oa = new objetoanimado(ACCola.panel, ACCola.xinicial, ACCola.yinicial, ACCola.xfinal, ACCola.yfinal);
                oa.start();
            } else {
                S.agregar(item);
                objetoanimado oa = new objetoanimado(ACSalida.panel, ACSalida.xinicial, ACSalida.yinicial, ACSalida.xfinal, ACSalida.yfinal);
                oa.start();
            }
        } else {
            C.add(item);
            estadistica.add(C.size());
            agregados++;
            objetoanimado oa = new objetoanimado(ACCola.panel, ACCola.xinicial, ACCola.yinicial, ACCola.xfinal, ACCola.yfinal);
            oa.start();
        }

    }

    public synchronized objeto obtener() {
        objeto temp = null;

        if (C.size() > 0) {
            temp = C.pop();
        } else {
            temp = null;
        }

        return temp;
    }

    public boolean isTruncado() {
        return truncado;
    }

    public int getObjetostotales() {
        return objetostotales;
    }
}
